AtCoder Beginner Contest 191 A~D题解

您所在的位置:网站首页 digital graffiti游戏 AtCoder Beginner Contest 191 A~D题解

AtCoder Beginner Contest 191 A~D题解

2023-07-22 04:11| 来源: 网络整理| 查看: 265

ABC191 A~D [A - Vanishing Pitch](https://atcoder.jp/contests/abc191/tasks/abc191_a)题目大意输入格式输出格式样例分析代码 [B - Remove It](https://atcoder.jp/contests/abc191/tasks/abc191_b)题目大意输入格式输出格式样例样例输入1样例输出1样例输入2样例输出2 分析代码 [C - Digital Graffiti](https://atcoder.jp/contests/abc191/tasks/abc191_c)题目大意输入格式输出格式样例样例输入样例输出 自制数据输入输出 分析代码 [D - Circle Lattice Points](https://atcoder.jp/contests/abc191/tasks/abc191_d)题目大意输入格式输出格式样例样例输入1样例输出1样例输入2样例输出2样例输入3样例输出3 分析代码

A - Vanishing Pitch 题目大意

一个球的速度是 V  m/s V~\text{m/s} V m/s,它飞了 T T T秒后会隐形,飞了 S S S秒时会接触隐形。 球在飞了 D D D米后,人能看见它吗?输出Yes或者No。

1 ≤ V ≤ 1000 1\le V\le 1000 1≤V≤1000 1 ≤ T < S ≤ 1000 1\le T int n, x; scanf("%d%d", &n, &x); while(n--) { int a; scanf("%d", &a); if(a != x) printf("%d ", a); } putchar('\n'); return 0; } C - Digital Graffiti 题目大意

我们有一张 H × W H\times W H×W的方格纸,在 ( i , j ) (i,j) (i,j)位置上的点是 S i , j S_{i,j} Si,j​。 每一个方格都是黑色(#)或白色(.),题目保证最外圈的点都是白色的。 黑色方格放在一起是一个多边形。求这个多边形的边数。

3 ≤ H , W ≤ 10 3\le H,W\le 10 3≤H,W≤10

输入格式

H   W H~W H W S 1 , 1 S 1 , 2 … S 1 , W S_{1,1}S_{1,2}\dots S_{1,W} S1,1​S1,2​…S1,W​ S 2 , 1 S 2 , 2 … S 2 , W S_{2,1}S_{2,2}\dots S_{2,W} S2,1​S2,2​…S2,W​ ⋮ \vdots ⋮ S H , 1 S H , 2 … S H , W S_{H,1}S_{H,2}\dots S_{H,W} SH,1​SH,2​…SH,W​

输出格式

输出答案。

样例 样例输入 5 5 ..... .###. .###. .###. ..... 样例输出 4

这是一个四边形。

自制数据

由于样例太简单,无法全面测试我们的程序。因此,博主再提供一组数据:

输入 5 5 ..... ..#.. .###. .#.#. ..... 输出 12 分析

很多人看到这种图就会想到 DFS \text{DFS} DFS、 BFS \text{BFS} BFS……其实这道题根本不需要。 这道题的做法来源于一个很简单的定理:多边形的顶点数=边数。 再进一步分析,一个点,在这个图上,怎样判断其是否为顶点? 其实,只要一个点周围四个方格中有一个或三个白方格,那么它就是一个顶点。 我们只要用一个 2 × 2 2\times 2 2×2的正方形搜索即可。

代码 #include #define maxn 15 using namespace std; char c[maxn][maxn]; int main() { int h, w, ans = 0; scanf("%d%d", &h, &w); for(int i=0; i // Returns: input * 10000. LL res = 0LL; int num = 0; bool flag = false, negative = false; for(char c=getchar(); c != ' ' && c != '\n'; c=getchar()) { if(c == '-') negative = true; else if(c == '.') flag = true; else { res *= 10LL; res += c - '0'; if(flag) num ++; } } for(int i=num; i i *= DIV; LL l = y, r = y + R; while(l // Returns: ceil(a / DIV). if(a x = read(), y = read(), R = read(); LL ans = 0LL, left = ceildiv(x - R), right = floordiv(x + R); for(LL i=left; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3